home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Grand Slam 3
/
Grand Slam 3.iso
/
026
/
imphob10.arj
/
IMP10_EX.ARJ
/
W_GEMMIS.ARJ
/
GEMMIS.DOC
< prev
next >
Wrap
Text File
|
1995-05-15
|
23KB
|
560 lines
--------W-2F1600-----------------------------
INT 2F - MS Windows - WINDOWS ENHANCED MODE INSTALLATION CHECK
AX = 1600h
Return: AL = status
00h neither Windows 3.x enhanced mode nor Windows/386 2.x running
01h Windows/386 2.x running
80h XMS version 1 driver installed (neither Windows 3.x enhanced
mode nor Windows/386 2.x running) (obsolete--see note)
FFh Windows/386 2.x running
AL = anything else
AL = Windows major version number >= 3
AH = Windows minor version number
Notes: INT 2F/AH=16h comprises an API for non-Windows programs (DOS device
drivers, TSRs, and applications) to cooperate with multitasking
Windows/386 2.x and Windows 3.x and higher enhanced mode.
certain calls are also supported in the Microsoft 80286 DOS extender in
Windows standard mode
this function served as the installation check and AX=1610h served to
get the driver entry point for XMS version 1, which is now obsolete.
Use AX=4300h and AX=4310h instead
SeeAlso: AX=160Ah,AX=1610h,AX=4300h,AX=4680h
Index: installation check;XMS version 1
--------W-2F1602-----------------------------
INT 2F - MS Windows/386 2.x - GET API ENTRY POINT
AX = 1602h
Return: ES:DI -> Windows/386 2.x API procedure entry point
Notes: this interface is supported in Windows 3.x only for 2.x compatibility
to get the current virtual machine (VM) ID in Windows/386 2.x:
AX = 0000h
ES:DI -> return address
JUMP to address returned from INT 2F/AX=1602h
After JUMP, at return address:
BX = current VM ID.
SeeAlso: AX=C020h
--------W-2F1603-----------------------------
INT 2F - MS Windows/386 - GET INSTANCE DATA
AX = 1603h
Return: AX = 5248h ('RH') if supported
DS:SI -> Windows/386 instance data (see below)
Notes: reportedly supported by RM Nimbus MS-DOS 3.3 kernel
this function is called by DOSMGR when AX=1607h/BX=0015h is not
supported, as is the case in DOS versions prior to 5.0
see Geoff Chappell's book _DOS_Internals_ for additional discussions of
this function, DOSMGR's behavior, and instancing in general
SeeAlso: AX=1607h/BX=0015h
Format of Windows/386 instance data:
Offset Size Description
00h WORD segment of IO.SYS (0000h = default 0070h)
02h WORD offset in IO.SYS of STACKS data structure (DOS 3.2x)
0000h if not applicable
04h WORD number of instance data entries (max 32)
06h Array of instance data entries
Offset Size Description
00h WORD segment (0002h = DOS kernel)
02h WORD offset
04h WORD size
--------W-2F1605-----------------------------
INT 2F - MS Windows - WINDOWS ENH MODE & 286 DOSX INIT BROADCAST
AX = 1605h
ES:BX = 0000h:0000h
DS:SI = 0000h:0000h
CX = 0000h
DX = flags
bit 0 = 0 if Windows enhanced-mode initialization
bit 0 = 1 if Microsoft 286 DOS extender initialization
bits 1-15 reserved (undefined)
DI = version number (major in upper byte, minor in lower)
Return: CX = 0000h if okay for Windows to load
CX = FFFFh (other registers unchanged) if Windows 3.0 in standard mode
CX <> 0 if Windows should not load
ES:BX -> startup info structure (see below)
DS:SI -> virtual86 mode enable/disable callback or 0000h:0000h
Notes: the Windows enhanced mode loader and Microsoft 286 DOS extender will
broadcast an INT 2F/AX=1605h call when initializing. Any DOS device
driver or TSR can watch for this broadcast and return the appropriate
values. If the driver or TSR returns CX <> 0, it is also its
responsibility to display an error message.
each handler must first chain to the prior INT 2F handler with
registers unchanged before processing the call
if the handler requires local data on a per-VM basis, it must store the
returned ES:BX in the "next" field of a startup info structure and
return a pointer to that structure in ES:BX
a single TSR may set the V86 mode enable/disable callback; if DS:SI is
already nonzero, the TSR must fail the initialization by setting CX
nonzero
MSD checks for Windows 3.0 running in standard mode by testing whether
CX=FFFFh and other registers are unchanged on return
SeeAlso: AX=1606h,AX=1608h,AX=4B05h
Format of Startup Information Structure:
Offset Size Description
00h 2 BYTEs major, minor version of info structure
02h DWORD pointer to next startup info structure or 0000h:0000h
06h DWORD pointer to ASCIZ name of virtual device file or 0000h:0000h
0Ah DWORD virtual device reference data (see below)
(only used if above nonzero)
0Eh DWORD pointer to instance data records or 0000h:0000h
Format of one Instance Item in array:
Offset Size Description
00h DWORD address of instance data (end of array if 0000h:0000h)
04h WORD size of instance data
Format of Virtual Device Reference Data:
Offset Size Description
00h DWORD physical address of ??? or 00000000h
04h DWORD physical address of ??? table
08h DWORD "DEST_PAGE" address to which pages must be mapped
0Ch N DWORDs "SRC_PAGE" physical addresses of the pages
00000000h = end of table
Note: EMM386.EXE sets the first pointer to the start of the device driver
chain, the second pointer to a field of 40h bytes followed by a
16-bit offset to the end of the SRC_PAGE table, and DEST_PAGE to
the start segment of the UMB area
Virtual mode enable/disable procedure called with:
AX = 0000h disable V86 mode
AX = 0001h enable V86 mode
interrupts disabled
Return: CF set on error
CF clear if successful
interrupts disabled
--------W-2F1606-----------------------------
INT 2F - MS Windows - WINDOWS ENH MODE & 286 DOSX EXIT BROADCAST
AX = 1606h
DX = flags
bit 0 = 0 if Windows enhanced-mode exit
bit 0 = 1 if Microsoft 286 DOS extender exit
bits 1-15 reserved (undefined)
Notes: if the init broadcast fails (AX=1605h returned CX <> 0), then this
broadcast will be issued immediately.
this call will be issued in real mode
SeeAlso: AX=1605h,AX=1609h
--------W-2F1607-----------------------------
INT 2F - MS Windows - VIRTUAL DEVICE CALL OUT API
AX = 1607h
BX = virtual device ID (see INT 2F/AX=1684h)
CX = (usually) callout subfunction
Return: (usually) AX,BX,CX,DX,ES contain results
Notes: more of a convention than an API, this call specifies a standard
mechanism for Windows enhanced-mode virtual devices (VxD's) to talk
to DOS device drivers and TSRs
see below for details on several virtual devices
SeeAlso: AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1607h/BX=0015h
SeeAlso: AX=1684h,AX=C020h
--------W-2F1607BX0006-----------------------
INT 2F - MS Windows - "V86MMGR" VIRTUAL DEVICE API
AX = 1607h
BX = 0006h (VxD identifier of "V86MMGR")
CX = 0000h
Return: AX = status
0000h if local A20 state changed
1607h if A20 unchanged
other if global A20 state changed
--------W-2F1607BX000C-----------------------
INT 2F - MS Windows - "VMD" VIRTUAL MOUSE DEVICE API
AX = 1607h
BX = 000Ch (VxD identifier of "VMD")
Return: CX = nonzero if mouse driver already virtualized
Note: VMD (Virtual Mouse Driver) calls this and then checks whether CX is
nonzero; if yes, it will not automatically virtualize the mouse
driver. This would be used if MOUSE.COM already virtualizes
itself using the Windows API.
SeeAlso: AX=1607h/BX=0014h,AX=1607h/BX=0015h
----------2F1607BX0010-----------------------
INT 2F C - MS Windows 3.1 - "BLOCKDEV" VIRTUAL HARD DISK DEVICE API
AX = 1607h
BX = 0010h (VxD identifier of "BLOCKDEV")
CX = function
0001h starting FastDisk compatibility tests
0002h ending FastDisk compatibility tests
0003h check if FastDisk installation allowed
Return: CX = 0000h if allowed
Note: this interface is called by the Windows FastDisk driver (such as
WDCTRL) when it thinks that the INT 13h handler immediately below
IO.SYS's INT 13h code is not in ROM; it should be supported by any
program which hooks itself underneath IO.SYS's INT 13h code with
INT 2F/AH=13h
SeeAlso: AX=1607h/BX=0014h,INT 2F/AH=13h
--------W-2F1607BX0014-----------------------
INT 2F - MS Windows - "VNETBIOS" VIRTUAL DEVICE API
AX = 1607h
BX = 0014h (VxD identifier of "VNETBIOS")
Return: ES:DI -> 128-byte table specifying VNETBIOS actions for each NetBIOS
command code (see below)
Note: VNETBIOS (Virtual NetBIOS) calls this function to determine whether
the NetBIOS has an extensions Windows should know about
SeeAlso: AX=1607h/BX=000Ch,AX=1607h/BX=0010h,AX=1607h/BX=0015h
Values for action code:
00h "VN_Unknown" unknown command
04h "VN_No_Map" no memory mapping necessary
08h "VN_Map_In" input buffer is quickly used, so no global mapping needed
0Ch "VN_Map_In" output buffer is quickly used, so no global mapping needed
10h "VN_Map_In_Out" buffer is quickly used, so no global mapping needed
14h "VN_Chain_Send" the chain-send command
18h "VN_Cancel" special case for cancel command
1Ch "VN_Buffer_In" buffer is incoming
20h "VN_Buffer_Out" buffer is outgoing
24h "VN_Buffer_In_Out" buffer used for both incoming and outgoing data
--------D-2F1607BX0015-----------------------
INT 2F C - MS Windows - "DOSMGR" VIRTUAL DEVICE API
AX = 1607h
BX = 0015h (VxD identifier of "DOSMGR")
CX = function
0000h query instance processing
DX = 0000h
Return: CX = state
0000h not instanced
other instanced (DOS 5+ kernel returns 0001h)
DX = segment of DOS drivers or 0000h for
default of 0070h
ES:BX -> patch table (see below)
0001h set patches in DOS
DX = bit mask of patch requests
bit 0 enable critical sections
bit 1 NOP setting/checking user ID
bit 2 turn INT 21/AH=3Fh on STDIN into polling loop
bit 3 trap stack fault in "SYSINIT" to WIN386
bit 4 BIOS patch to trap "Insert disk X:" to WIN386
Return: AX = B97Ch
BX = bit mask of patches applied
DX = A2ABh
0002h remove patches in DOS (ignored by DOS 5.0 kernel)
DX = bit mask of patch requests (see function 0001h)
Return: CX = 0000h (DOS 5-6)
Note: return values are ignored by DOSMGR in Windows 3.1
0003h get size of DOS data structures
DX = bit mask of request (only one bit can be set)
bit 0: Current Directory Structure size
Return: if supported request:
AX = B97Ch
CX = size in bytes of requested structure
DX = A2ABh
else:
CX = 0000h
all other registers preserved
0004h determine instanced data structures
Return: AX = B97Ch if supported
DX = A2ABh if supported (DOS 5+ kernel returns 0000h)
BX = bit mask of instanced items
bit 0: CDS
bit 1: SFT
bit 2: device list
bit 3: DOS swappable data area
0005h get device driver size
ES = segment of device driver
Return: DX:AX = 0000h:0000h on error (not dev. driver segment)
DX:AX = A2ABh:B97Ch if successful
BX:CX = size of device driver in bytes
Notes: DOSMGR (DOS Manager) will check whether the OEM DOS/BIOS data has
been instanced via this API and will not perform its own default
instancing of the normal DOS/BIOS data if so; if this API is not
supported, DOSMGR will also try to access instancing data through
INT 2F/AX=1603h
these functions are supported by the DOS 5+ kernel; DOSMGR contains
tables of instancing information for earlier versions of DOS
see Geoff Chappell's book _DOS_Internals_ for additional discussions of
DOSMGR's behavior and instancing in general
SeeAlso: AX=1603h,AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1684h
Format of patch table:
Offset Size Description
00h 2 BYTEs DOS version (major, minor)
02h WORD offset in DOS data segment of "SAVEDS"
04h WORD offset in DOS data segment of "SAVEBX"
06h WORD offset in DOS data segment of InDOS flag
08h WORD offset in DOS data segment of User ID word
0Ah WORD offset in DOS data segment of "CritPatch" table to enable
critical section calls (see INT 2A/AH=80h)
0Ch WORD (DOS 5+ only) offset in DOS data segment of "UMB_HEAD",
containing segment of last MCB in conventional memory
--------E-2F1607BX22C0-----------------------
INT 2F - Rational Systems DOS/4GW - ???
AX = 1607h
BX = 22C0h
???
Return: ???
SeeAlso: INT 15/AX=BF02h,INT 15/AX=BF04h
--------W-2F1608-----------------------------
INT 2F C - MS Windows - WINDOWS ENHANCED MODE INIT COMPLETE BROADCAST
AX = 1608h
Notes: called after all installable devices have been initialized
real-mode software may be called between the Windows enhanced-mode init
call (AX=1605h) and this call; the software must detect this
situation
SeeAlso: AX=1605h,AX=1609h
--------W-2F1609-----------------------------
INT 2F C - MS Windows - WINDOWS ENHANCED MODE BEGIN EXIT BROADCAST
AX = 1609h
Note: called at the beginning of a normal exit sequence; not made in the
event of a fatal system crash
SeeAlso: AX=1606h,AX=1608h
--------W-2F160A-----------------------------
INT 2F - MS Windows 3.1 - IDENTIFY WINDOWS VERSION AND TYPE
AX = 160Ah
Return: AX = 0000h if call supported
BX = version (BH=major, BL=minor)
CX = mode (0002h = standard, 0003h = enhanced)
INT 21 U - Memory Managers - GET API ENTRY POINT
AX = 4402h subfn 00h
BX = file handle for device "EMMXXXX0"
CX = 0006h (size of buffer in bytes)
DS:DX -> buffer for API entry point record (see below)
first byte must be 00h on entry
Return: CF clear if successful
buffer filled (see INT 67/AH=3Fh function 1B00h)
CF set on error
AX = error code (01h,05h,06h,0Dh) (see AH=59h)
Notes: this function is supported by Microsoft EMM386.EXE v4.45+ and
CEMM v5.10+, and is intended for use by MS Windows as it starts up
if no other program has hooked INT 67, an alternate installation
check for CEMM is testing for the string
"COMPAQ EXPANDED MEMORY MANAGER 386" at offset 14h in the INT 67
handler's segment; if present, the word at offset 12h contains the
offset of the API entry point
SeeAlso: AX=4402h/SF=01h,AX=4402h/SF=02h,AX=4402h"EMM386",INT 67/AH=3Fh
Format of API entry point record:
Offset Size Description
00h WORD ??? (0022h for CEMM 5.11, 0025h for MS EMM386 v4.45)
02h DWORD manager's private API entry point (see below,INT 67/AX=FFA5h)
Call CEMM v5.10+ entry point with:
AH = 00h get memory manager's state
Return: AH = state
bit 0: turned OFF
bit 1: AUTO mode enabled
AH = 01h set memory manager's state
AL = new state (00h ON, 01h OFF, 02h AUTO)
Return: CF clear if successful
CF set on error
AH = 02h Weitek coprocessor support
AL = subfunction
00h get Weitek support state
Return: AL = status
bit 0: Weitek coprocessor is present
bit 1: Weitek support is enabled
01h turn on Weitek support
02h turn off Weitek support
Return: CF clear if successful
CF set on error
AH = error code (01h invalid subfunc, 02h no Weitek)
AH = 05h get statistics
???
AH > 06h
Return: CF set
AH = 01h (invalid function)
Notes: AH=03h,04h,06h are NOPs which return CF clear, presumably for backwards
compatibility with earlier versions of CEMM
in v5.11, AH=05h merely prints an error message (using INT 21/AH=09h)
stating that a different version of CEMM is installed and it is
therefore not possible to display the statistics
--------m-214402SF01-------------------------
INT 21 U - Memory Managers - GET EMM IMPORT STRUCTURE ADDRESS
AX = 4402h subfn 01h
BX = file handle for device "EMMXXXX0"
CX = 0006h (size of buffer in bytes)
DS:DX -> buffer for EMM import structure record (see below)
first byte must be 01h on entry
Return: CF clear if successful
buffer filled (see INT 67/AH=3Fh function 1B00h)
CF set on error
AX = error code (01h,05h,06h,0Dh) (see AH=59h)
Notes: this function is supported by Microsoft EMM386.EXE v4.45+,
QEMM-386 v6+, and CEMM v5.10+, and is intended for use by MS Windows
as it starts up
for QEMM-386, this call always returns an error if Windows3 support
has been disabled with the NW3 switch
SeeAlso: AX=4402h/SF=00h,AX=4402h"EMM386",INT 2F/AX=D201h/BX=5145h
SeeAlso: INT 67/AH=3Fh
Format of EMM import structure record:
Offset Size Description
00h DWORD physical address of EMM import structure
04h BYTE EMM import structure major version
05h BYTE EMM import structure minor version
Note: version 1.00 contains only EMS information (Windows 3.0+)
version 1.10 contains UMB/XMS/HMA/EMS information (Windows 3.1)
version 1.11 is version 1.10 plus memory manager maker/product name
; ***************************************************************************
; ***************************************************************************
; ***************************************************************************
; ***************************************************************************
; ***************************************************************************
; ***************************************************************************
; ***************************************************************************
Format of Global EMM Import record:
Offset Size Description
00h BYTE bit flags
bit 2: ???
bit 3: free EMM386 virtual HMA only if hma_page_table_paddr!=0
bit 4: no UMB???
01h BYTE reserved (0)
02h WORD size of structure in bytes
04h WORD structure version
06h DWORD reserved
0Ah 384 BYTEs 64 EMS frame status records (see below), one per 16K of
real-mode 1M address space
18Ah BYTE ??? (must be at least 3*number_of_EMS_frames+4)
18Bh BYTE number of UMB frame descriptors following
18Ch 4N DWORDs UMB frame descriptors
each is 4 DWORDs giving physical page numbers for the four
4K pages of a 16K EMS frame (00000000h if non-UMB page)
var BYTE number of EMS handle info records following
16N BYTEs EMS handle info records (see below)
---version 1.10+ ---
DWORD realmode INT 67 vector (used by Windows to set breakpoints)
DWORD physical address of HMA page table values
BYTE number of free page entries following
2N DWORDs free page entries
each is:
DWORD physical page number
DWORD number of consecutive physical pages
BYTE number of XMS handle info records following
00h if memory manager does not emulate XMS or has real mode
XMS code which can execute in the Windows environment
12N BYTEs XMS handle info records (see below)
BYTE number of free UMB info records following
2N WORDs free UMB info records
each is:
WORD real mode start segment
WORD size in paragraphs
---version 1.11---
20 BYTEs blank-padded maker name
20 BYTEs blank-padded product name
Format of EMS frame status record:
Offset Size Description
00h BYTE frame type (see below)
01h BYTE owner handle (00h/FFh = none) from frame including UMB
index to UMB frame descriptors
02h WORD logical page for frame, 7FFFh if none, FFFFh if non-EMS frame
04h BYTE EMS physical page number (FFh for non-EMS = don't care???)
05h BYTE flags for non-EMS frames (00h for EMS frame)
bits 0,1 for first 4K, bits 2,3 for second 4K, etc:
10: direct mapping (linear address = physical address)
01: UMB mapping
Bitfields for EMS frame type:
Bit(s) Description
0 EMS frame
1 (if EMS frame) in standard 64K page frame
2 first 4K of frame is UMB
3 second 4K of frame is UMB
4 third 4K of frame is UMB
5 last 4K of frame is UMB
Format of EMS handle info record:
Offset Size Description
00h BYTE handle number (00h = system handle)
01h BYTE flags
bit 0: normal handle rather than system handle
bit 2: ??? (set by some EMS managers)
02h 8 BYTEs EMS handle's name
0Ah WORD number of 16K pages for handle
0Ch DWORD physical address of page table entries forming page map
Note: all values should be zero for the system handle if no large frame
support is present
Format of XMS handle info record:
Offset Size Description
00h WORD handle
02h WORD flags
bit 0: handle usable by Windows
(already in use when Windows started if clear)
bit 1: reserved (0)
04h DWORD size in KB (may be zero, used only if flags bit 0 set)
08h DWORD physical address (only if flags bit 0 set)
; ***************************************************************************
; ***************************************************************************
; ***************************************************************************
; ***************************************************************************
; ***************************************************************************
; ***************************************************************************
; ***************************************************************************
--------m-214402SF02-------------------------
INT 21 U - Memory Managers - GET MEMORY MANAGER VERSION
AX = 4402h subfn 02h
BX = file handle for device "EMMXXXX0"
CX = 0002h (size of buffer in bytes)
DS:DX -> buffer for memory manager version (see below)
first byte must be 02h on entry
Return: CF clear if successful
buffer filled
CF set on error
AX = error code (01h,05h,06h,0Dh) (see AH=59h)
Note: this function is supported by Microsoft EMM386.EXE v4.45+ and
CEMM v5.10+, and is intended for use by MS Windows as it starts up
SeeAlso: AX=4402h/SF=00h,AX=4402h"EMM386",INT 67/AH=3Fh
Format of memory manager version:
Offset Size Description
00h BYTE major version
01h BYTE minor version (binary)
--------m-214402-----------------------------
INT 21 U - Microsoft EMM386.EXE v4.45 - GET MEMORY MANAGER INFORMATION
AX = 4402h
BX = file handle for device "EMMXXXX0"
CX = size of buffer in bytes (varies, see below)
DS:DX -> buffer for returned data (see below)
first byte must be set on entry to indicate desired data
Return: CF clear if successful
buffer filled
CF set on error
AX = error code (01h,05h,06h,0Dh) (see AH=59h)
Notes: an error is returned if the number of bytes to be read does not match
the number of bytes returned for the specified data item
this function is part of the interface which allows MS Windows to
cooperate with memory managers
SeeAlso: AX=4402h/SF=00h,AX=4402h/SF=01h,AX=4402h/SF=02h,INT 67/AX=FFA5h
Format of data buffer:
Offset Size Description
00h BYTE (call) function
03h get ???
04h get ???
---function 03h---
00h WORD ???
02h WORD ???
---function 04h---
00h WORD segment of UMB containing EMM386 code/data
02h WORD number of paragraphs of EMM386 code/data in UMB
04h WORD ???